Autenticacion JWT (Flask)

Descripcion

Como utilizar autenticación JWT en flask.

Crear un endpoint login que devuelva un token de acceso

Metodo

Primero necesitamos instalar los siguientes paquetes:

pip install Flask Flask-JWT-Extended

El código que usaremos será el siguiente:

from flask import Flask, request, jsonify
from flask_jwt_extended import JWTManager, create_access_token, jwt_required

app = Flask(__name__)

# Configuración básica de JWT
app.config['JWT_SECRET_KEY'] = 'super-secret'  # Cambia esto por una clave segura en producción
JWTManager(app)

# Simulación de una base de datos de usuarios
users = {
    "user123": "password123"
}

# Endpoint de autenticación
@app.route('/login', methods=['POST'])
def login():
    data = request.get_json()

    username = data.get('username')
    password = data.get('password')

    if username in users and users[username] == password:
        access_token = create_access_token(identity=username)
        return jsonify({'access_token': access_token}), 200
    else:
        return jsonify({'message': 'Credenciales inválidas'}), 401

# Endpoint protegido que requiere token JWT
@app.route('/protected', methods=['GET'])
@jwt_required()
def protected():
    current_user = "current_user"  # El identity proporcionado por el token JWT
    return jsonify({'message': f'¡Hola, {current_user}! Este es un endpoint protegido.'})

if __name__ == '__main__':
    app.run(debug=True)

Una vez lanzada la aplicación podemos obtener un token de acceso desde postman:

O tambien usando curl asi:

curl -X POST http://localhost:5000/login -H 'Content-Type: application/json' -d '{"username": "user123", "password": "password123"}'
Tags

Python | Flask | JWT Auth